<template>
  <div class="searchIndex-page">
    <van-nav-bar title="搜索中心" left-arrow @click-left="$router.push('/')"></van-nav-bar>
    <van-search
      v-model="keyWord"
      show-action
      shape="round"
      placeholder="请输入搜索关键词"
      @input="getSuggestionList">
      <template #action>
        <div @click="toSearch">搜索</div>
      </template>
    </van-search>
    <!-- 联想建议区域 -->
    <van-cell-group v-if="keyWord">
      <van-cell @click="associateClick(index)" v-for="(item, index) in wrapperList" :key="item" icon="search">
        <div v-html="item"></div>
      </van-cell>
    </van-cell-group>

    <!-- 搜索历史记录 -->
    <van-cell-group v-else>
      <van-cell value="历史记录"></van-cell>
      <van-cell @click="historyResult(item)" v-for="(item, index) in historyList" :key="item" :title="item">
        <template #right-icon>
          <van-icon @click.stop="delHistory(index)" name="close" />
        </template>
      </van-cell>
    </van-cell-group>
  </div>
</template>

<script>
// 导入搜索接口
import { getSuggestion } from '@/api/search'
// 导入封装的 localStorage 函数
import { setItem, getItem } from '@/utils/ls'
// 引入处理防抖包
import _ from 'lodash'
export default {
  name: 'SearchIndex',
  data () {
    return {
      keyWord: '', // 关键字
      suggestionList: [], // 建议搜索表
      historyList: getItem('my-history') || [] // 历史记录列表 先从本地存储拿
    }
  },
  computed: {
    // 处理搜索，联想区域高亮
    wrapperList () {
      // const newArr = []
      const newArr = this.suggestionList.map(item => {
        // new RegExp 可以传变量
        const reg = new RegExp(this.keyWord, 'g')
        const newStr = item.replace(reg, function (target) {
          return `<span style="color: red">${target}</span>`
        })
        return newStr
      })
      return newArr
    }
    // 让历史记录不重复
    // noRepetitionHistory () {
    //   const newArr = this.historyList.forEach(item => {
    //     const newArr2 = this.historyList.find(sole => {
    //       return item === sole
    //     })
    //     console.log(newArr2)
    //   })
    //   return newArr
    // }
  },
  methods: {
    // 获取搜索结果
    getSuggestionList: _.debounce(function () {
      // 防止删除为空
      if (this.keyWord === '') {
        this.suggestionList = []
        return false
      }
      // 把获取到的结果，在联想建议区域渲染
      getSuggestion(this.keyWord).then(res => {
        // console.log(res)
        this.suggestionList = res.data.data.options
      })
    }, 500),
    // 点击搜搜按钮
    toSearch () {
      // 防止点击为空
      if (this.keyWord === '') return false
      // 先从数据里搜索有没有重复的值，没有就添加，没有直接return
      const flag = this.historyList.find(item => item === this.keyWord)
      if (flag) return false

      // 两处地方都存一下
      this.historyList.push(this.keyWord)
      setItem('my-history', this.historyList)

      // 跳转到搜索结果页
      this.$router.push({
        path: '/searchResult',
        query: {
          q: this.keyWord
        }
      })
    },
    // 点击联想项
    associateClick (index) {
      // 先从数据里搜索有没有重复的值，没有就添加，没有直接return
      const flag = this.historyList.find(item => item === this.suggestionList[index])
      if (flag) return false
      // 拿到的值是 经过富文本渲染的
      // 我们需要拿到原生数据，可以根据索引值，去没经过改变的数据列表去拿到当前点击的原始值
      this.historyList.push(this.suggestionList[index])
      setItem('my-history', this.historyList)
      // 跳转到搜索结果页
      this.$router.push({
        path: '/searchResult',
        query: {
          q: this.suggestionList[index]
        }
      })
    },
    // 删除当前点击的历史记录
    delHistory (index) {
      this.historyList.splice(index, 1)
      setItem('my-history', this.historyList) // 把删除的数据同步到本都存储里去
    },
    // 点击历史记录
    historyResult (item) {
      // 跳转到搜索结果页
      this.$router.push({
        path: '/searchResult',
        query: {
          q: item
        }
      })
    }
  }
}
</script>

<style lang="less" scoped>

</style>
